import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Demo4 {
    /**
     * 利用Collections工具类中的方法对集合排序
     * @param args
     */
    public static void main(String[] args) {
        //如果你的集合是基本数据类型或者是字符串，则可以直接排序
        List<Integer> integers = Arrays.asList(6, 3, 8, 2, 4, 5, 7);
        //将基本数据类型的值添加到集合后，在集合中该元素为对应的包装类的对象
        Collections.sort(integers);
        //排序后
        //integers.forEach(System.out::println);

        //如果集合中的元素是自定义的类，则不可以直接排序
        List<Item> items = Arrays.asList(
                new Item(5,5),
                new Item(4,2),
                new Item(2,3),
                new Item(1,1),
                new Item(3,2),
                new Item(1,4),
                new Item(1,2),
                new Item(1,3)
        );
        Collections.sort(items);
        items.forEach(System.out::println);
    }

    /**
     * 自然排序
     */
    static class Item implements Comparable<Item>{
        int i;
        int j;

        public Item(int i,int j) {
            this.i = i;
            this.j = j;
        }

        @Override
        public int compareTo(Item o) {
            //自然排序过程中，将参数对象和当前对象this进行比较
            //升序排序
            //当前对象 > 参数对象，则返回 正数
            //当前对象 < 参数对象，则返回 负数
            //当前对象 = 参数对象，则返回 0

            //return this.i - o.i;

            //降序排序
            //交换两个比较元素的顺序即可
            //return o.i - this.i;

            //先根据i升序排序，当i相同了，再根据j倒序排序
            if (this.i == o.i) {
                //编写j倒序排序的逻辑
                return o.j - this.j;
            } else {
                return this.i - o.i;
            }
        }

        @Override
        public String toString() {
            return "Item{" +
                    "i=" + i +
                    ", j=" + j +
                    '}';
        }
    }
}
